package com.internetCafes.spms.web.customer.service.area;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.internetCafes.spms.web.customer.entity.area.Area;
import com.internetCafes.spms.web.customer.model.area.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 区域表 服务类
 * </p>
 *
 * @author Zj
 * @since 2021-10-18
 */
public interface IAreaService extends IService<Area> {

    /**
     * 获取区域列表
     *
     * @param areaDo 请求参数
     * @return 区域列表
     */
    List<EntAreaPo> listPo(EntAreaDo areaDo);

    /**
     * 根据管理员id 列表获取 区域信息
     *
     * @param managerIdList 管理员id列表
     * @return 区域信息列表
     */
    List<EntAreaManagerPo> getAreaInfoByManagerIdList(List<Long> managerIdList);

    /**
     * 区域名单-区域方向
     *
     * @param areaId 区域id
     * @return 区域信息
     */
    EntAreaDetailPo getAreaDetailForSaleByAreaId(Long areaId);

    /**
     * 区域名单-区域方向
     *
     * @param areaDetailDo 请求参数
     * @return 区域信息
     */
    List<EntAreaDetailPo> listAreaDetailForSale(EntAreaDetailDo areaDetailDo);

    /**
     * 区域详情列表
     *
     * @param areaDetailDo 请求参数
     * @return 区域详情列表
     */
    List<EntAreaDetailPo> listAreaDetailForManager(EntAreaDetailDo areaDetailDo);

    /**
     * 获取当前用户管理或者销售区域列表
     *
     * @return 区域列表
     */
    List<Area> listManagerOrSale();

    /**
     * 提供给定时器获取
     */
    List<Area> listNoTenantId(Wrapper<Area> queryWrapper);

    /**
     * 根据条件获取区域列表
     *
     * @param areaDo 自定义请求参数
     * @return 区域信息列表
     */
    List<EntAreaPo> poList(EntAreaDo areaDo);

    /**
     * 获取当前区域，根据名称分组
     */
    Map<String, List<Area>> areaGroupByName();

    /**
     * 区域名单管理-列表-区域角度
     */
    List<EntAreaUserPagingPo> entAreaUserPoList(EntAreaUserPagingReq req);

    /**
     * 销售区域列表
     */
    List<EntSaleAreaListPo> saleAreaListPo(EntSaleAreaListDo saleAreaListDo);

    /**
     * 区域名单管理-详情-区域角度
     */
    EntAreaUserDetailPo entAreaUserPoDetail(Long id);

    /**
     * 区域名单管理-分页-区域角度
     */
    Page<EntAreaUserPagingPo> entAreaUserPoPaging(Page<Area> page, EntAreaUserPagingReq req);

    /**
     * 区域管理分页
     */
    Page<EntAreaPagingPo> entAreaPoPaging(Page<Area> page, Wrapper<Area> queryWrapper);
}
